/* 
 * Copyright (c) 2010, Avdhesh yadav.
 * http://www.avdheshyadav.com
 * Contact: avdhesh.yadav@gmail.com
 *
 * This library is free software; you can redistribute it and/or modify it under the terms
 * of the GNU Lesser General Public License as published by the Free Software Foundation,
 * either version 3 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License along with this
 * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 * Boston, MA 02111-1307, USA.
 *
 */

package com.avdy.p4j.sample.server.guice;

import com.avdy.p4j.jdbc.service.DataProvider;
import com.avdy.p4j.jdbc.service.DataProviderFactory;
import com.avdy.p4j.sample.server.dao.LibraryDataRepository;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
import com.google.inject.name.Named;

@Singleton
public class LibraryDataRepoProvider  implements Provider<LibraryDataRepository>
{
	private DataProviderFactory dataProviderFactory;
	private String databaseName;
	private String dbmsName;
	private boolean isTransactional;
	
	@Inject
	public LibraryDataRepoProvider(DataProviderFactory dataProviderFactory,@Named("use.jdbc.database") String databaseName, @Named("use.jdbc.dbms") String dbmsName,@Named("use.jdbc.transactional") boolean isTransactional)
	{
		this.dataProviderFactory = dataProviderFactory;
		this.databaseName = databaseName;
		this.dbmsName = dbmsName;
		this.isTransactional = isTransactional;
	}
	
	
	/**
	 * 
	 */
	public LibraryDataRepository get()
	{
		try 
		{
			DataProvider dataProvider =  dataProviderFactory.getDataProvider(databaseName, dbmsName, isTransactional);
			return LibraryDataRepository.getLibraryDataRepository(dataProvider);
		}
		catch (Throwable e)
		{
			e.printStackTrace();
            throw new RuntimeException(e.getMessage());
		}
	}
}
